package com.ljc.mapper;

import com.ljc.entity.RefreshTokenDetail;
import com.ljc.entity.User;
import com.ljc.entity.UserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface UserMapper {
    /**
     * 通过手机号获取用户
     */
    User getUserByPhone(String phone);

    /**
     * 添加用户
     */
    Integer addUser(User user);

    /**
     * 添加用户信息
     */
    Integer addUserInfo(UserInfo userInfo);

    /**
     * 根据id获取用户基本信息
     */
    User getUserById(Long id);

    /**
     * 根据用户id获取用户详细信息
     */
    UserInfo getUserInfoByUserId(Long userId);

    /**
     * 更新用户信息
     */
    Integer updateUserInfos(UserInfo userInfo);

    /**
     * 更新用户
     */
    void updateUsers(User user);

    /**
     * 根据用户id集合获取其中的所有用户详细信息
     */
    List<UserInfo> getUserInfoByUserIdS(Set<Long> userIdList);

    /**
     * 查询用户数据分页的数量
     */
    Integer pageCountUserInfos(Map<String, Object> params);

    /**
     * 分页查询用户
     */
    List<UserInfo> pageListUserInfos(Map<String, Object> params);

    /**
     * 通过手机号或邮箱获取用户
     */
    User getUserByPhoneOrEmail(@Param("phone") String phone, @Param("email") String email);

    /**
     * 删除refresh-token
     */
    Integer deleteRefreshTokenByUserId(Long userId);

    /**
     * 添加refresh-token
     */
    Integer addRefreshToken(@Param("refreshToken") String refreshToken,
                            @Param("userId") Long userId,
                            @Param("createTime") Date createTime);

    /**
     * 用户退出则将refresh-token设置为无效
     */
    void deleteRefreshToken(@Param("refreshToken") String refreshToken, @Param("userId") Long userId);

    /**
     * 刷新access-token
     */
    RefreshTokenDetail getRefreshTokenDetail(String refreshToken);

    /**
     * 根据用户id集合批量查询用户信息
     */
    List<UserInfo> batchGetUserInfoByUserIds(Set<Long> userIdList);
}
